<?  
 /** 
* @generator Le Classificateur 2.01 beta 
* @author Yann Boisclair-Roy 
* @date 2008/02/26
* @desc Classe qui contrôle les données de la table criteres
*/  
 
 class Criteres {

 	/**
 	* @desc Flag qui détermine si la recherche devra se faire avec des LIKE '%%' ou des " = "
 	* @var boolean
 	*/
 	var $rechercheExact = true; 
 
 	/**
 	* @desc Objet de connexion à la base de données
 	* @var Bd
 	*/
 	var $oBd; 
 	/**
 	* @desc Variable qui contient un bout de SQL qui déterminera l'ordre selon les voeux de l'usager
 	* @var string
 	*/
 	var $ordre; 
 	/**
 	* @desc Variable qui contient un bout de SQL qui déterminera la limite selon les voeux de l'usager
 	* @var String
 	*/
 	var $limite; 
 	/**
 	* @desc Variable qui contient un Array des résultats provenant de la requête SQL par GetInfos
 	* @var Array
 	*/
 	var $resultat; 
 	/**
 	* @desc Variables équivalente au champs noCritere de la table criteres
 	* @var int
 	*/
 	 var $noCritere;
 
 	/**
 	* @desc Variables équivalente au champs categorieCritere de la table criteres
 	* @var int
 	*/
 	 var $categorieCritere;
 
 	/**
 	* @desc Variables équivalente au champs critere de la table criteres
 	* @var String
 	*/
 	 var $critere;
 

 	/**
 	* @desc Constructeur de la class criteres. Si à l'instenciation de la classe on lui donne un numéro de clé primaire, 
 	*  celle-ci instenciera la class avec toutes les infos dans la table criteres concernant cette clé primaire.
 	* @access public
 	* @param	Bd	oBd
 	* @param int noCritere
 	*/
 	 function Criteres ( $oBd, $noCritere = 0 ) { 
 	 	 $this->oBd = $oBd; 
  	 	 if( $noCritere > 0 ) {  
  	 	 	 $this->noCritere = $noCritere; 
  	 	 	 $this->getInfos(); 
  	 	 } 
 	 }  
 
   	/**
 	* @desc Fonction mutatrice du champ noCritere
 	* @access public
 	* @param intnoCritere
 	*/
	function setNoCritere ( $noCritere ) {
		$this->noCritere = intval( $noCritere );
	}


 	/**
 	* @desc Fonction accesseur du champ noCritere
 	* @access public
 	* @return int
 	*/
	 function getNoCritere (){
	 	 return stripslashes( noCritere);
	}


 	/**
 	* @desc Fonction mutatrice du champ categorieCritere
 	* @access public
 	* @param intcategorieCritere
 	*/
	function setCategorieCritere ( $categorieCritere ) {
		$this->categorieCritere = intval( $categorieCritere );
	}


 	/**
 	* @desc Fonction accesseur du champ categorieCritere
 	* @access public
 	* @return int
 	*/
	 function getCategorieCritere (){
	 	 return stripslashes( categorieCritere);
	}


 	/**
 	* @desc Fonction mutatrice du champ critere
 	* @access public
 	* @param Stringcritere
 	*/
	function setCritere ( $critere ) {
		$this->critere = addslashes( $critere ) ;
	}


 	/**
 	* @desc Fonction accesseur du champ critere
 	* @access public
 	* @return String
 	*/
	 function getCritere (){
	 	 return stripslashes( critere);
	}


 	/**
 	* @desc Fonction mutatrice de la limite
 	* @access public
 	* @param string limite
 	*/
 	 function setLimite( $limite ) {  
 	 	 $this->limite =  $limite;  
 	 }  
 
   	/**
 	* @desc Fonction mutatrice de l'ordre
 	* @access public
 	* @param string ordre
 	*/
 	 function setOrdre( $ordre ) {  
 	 	 $this->ordre =  $ordre;  
 	 }  
 
   	/**
 	* @desc Fonction mutatrice de resultats
 	* @access public
 	* @return Array Resultats
 	*/
 	 function getResultats() {  
 	 	 return $this->resultats;  
 	 }  
 
   	/**
 	* @desc Fonction d'ajout et de mise à jour des données.
 	* @access public
 	* @return int
 	*/
	 function sauvegarde() { 
  		 if( empty( $this->noCritere ) ) { 
 			 $req = "INSERT INTO criteres ( categorieCritere, critere 	)  VALUES  ( " . $this->categorieCritere . ",  '" . $this->critere . "' ) ON DUPLICATE KEY UPDATE categorieCritere = " . $this->categorieCritere . ", critere =  '" . $this->critere . "' "; 
  			 $this->oBd->query( $req );
 			 $no = $this->oBd->getId(); 
 			 $this->noCritere = $no; 
 		 } else { 
 			 $req = "UPDATE criteres SET noCritere = " . $this->noCritere . ", categorieCritere = " . $this->categorieCritere . ", critere =  '" . $this->critere . "'  WHERE noCritere = " . $this->noCritere;
 			 $this->oBd->query( $req );
 			 $no = $this->noCritere;
 		 }
 		 return $no;  
 	 }  
  
  	/**
 	* @desc Fonction de recherche de données
 	* @access public
 	* @param string champs
 	*/
 	 function getInfos( $champs = "*" ) {
  		$variables = array( 'noCritere','categorieCritere','critere'); 
  		 $trouve = false; 
 		 $recherche = ' 1 = 1 '; 
 		 $operateurDebut = " = '"; 
 		 $operateurFin = "'"; 
 		 if( !$this->rechercheExact ) {  
  			 $operateurDebut = " LIKE '%"; 
  			 $operateurFin = "%'"; 
  		 }  
  		 for ( $i = 0; $i < count( $variables ); $i++ ) { 
 			if ( !empty( $this->$variables[ $i ] ) ) {  
 				 $trouve = true; 
 				 /* Ajout de l'opérateur */ 
  				 if ( !empty( $recherche ) ) { 
 					 $recherche .= " AND "; 
 				 } 
  				 $variable = $variables[ $i ];
 				 $tableau = $this->$variable;
 				 $valeur = $tableau;
 				 /* Concaténation des critères de recherche */ 
  				 if ( is_numeric( $valeur ) ) { 
 					 $recherche .= "criteres." . $variables[ $i ] . " = " . $valeur. " "; 
 				 } else { 
 					 $recherche .= "criteres." . $variables[ $i ] . $operateurDebut . addslashes( $valeur ) . $operateurFin; 
 				 } 
  			 } 
  		 } 
		 $req = "SELECT " . $champs . " FROM criteres WHERE " . $recherche . $this->ordre . $this->limite;
		 
  		 $infos = $this->oBd->query( $req ); 
 		 $this->resultats = $infos;
 		 $this->cleanup();
 		 for ( $i = 0; $i < count( $infos ); $i++ ) { 
	 	 	$this->noCritere = $infos[ $i ][ 'noCritere'] ; 
	 	 	$this->categorieCritere = $infos[ $i ][ 'categorieCritere'] ; 
	 	 	$this->critere = $infos[ $i ][ 'critere'] ; 
 		 } 
  	} 
  	/**
 	* @desc Fonction de suppression des données.
 	* @access public
 	*/
 	function delete() {
 		 $req = "DELETE FROM criteres WHERE noCritere = " . $this->noCritere; 
  		 $this->oBd->query( $req );
 	 } 

 	/**
 	* @desc Indique si la recherche dois etre exact ou pas ( true = LIKE '%x%' )" ),
 	* @access public
 	*/
 	 function setRechercheExact( $b ) {  
 	 	 $this->rechercheExact =  $b;  
 	 }  
 
   	/**
 	* @desc Fonction remet les variables membres à zéro
 	* @access private
 	*/
 	 function cleanup() { 
 	 	$this->noCritere = array(); 
  	 	$this->categorieCritere = array(); 
  	 	$this->critere = array(); 
  	 }  
	 
	 /**
	 *	@desc vas chercher tous les critères avec la catégories associé
	 *	@access public
	 *	@return	Array	Resultats de la requête
	 */
	 function getCritereAndCat( $noMontagne, $noUsager ) {
	 	$req = "SELECT
					 criteres.noCritere, 
					 criteres.critere as nomCritere,
					 categorieCritere.categorie
			    FROM 
					criteres LEFT JOIN
					categorieCritere ON criteres.categorieCritere = categorieCritere.noCategorieCritere LEFT JOIN
					votes ON votes.noCritere = criteres.noCritere
				GROUP BY criteres.noCritere";
				
		$tab = $this->oBd->query( $req );
		
		/* vas chercher les note déja envoyer pour chaque critères */
		$objVotes = new Vote( $this->oBd );
		$objVotes->setNoMontagne( $noMontagne );
		$objVotes->setNoUsager( $noUsager );
		$objVotes->getInfos();
		$tabVotes = $objVotes->getResultats();
		//print_r( $tab );
		/* classement des données selon Key => value */
		if( count( $tabVotes ) > 0 ) {
			foreach( $tabVotes as $vote ) {
				$tabVoteClasse[ $vote[ 'noCritere' ] ] = $vote[ 'note' ];
			}
		}
		/* association des critères avec les notes */
		for( $i = 0; $i < count( $tab ); $i++ ) {
			if( isset( $tabVoteClasse[ $tab[ $i ][ 'noCritere' ] ][ 'note' ] ) ) {
				$tab[ $i ][ 'note' ] = ( $tabVoteClasse[ $tab[ $i ][ 'noCritere' ] ][ 'note' ] ) * 20;
			} else {
				$tab[ $i ][ 'note' ] = 0;
			}
		}
		
		
		return $tab;
	 }
 
  }
?>